type checking rules